package model.analityka.cechy.funkcje.dosprawdzenia;

import infrastruktura.PlikNotowanieRepozytorium;
import model.analityka.cechy.funkcje.FunkcjaAT;
import model.portfel.NotowanieRepozytorium;

import org.springframework.beans.factory.annotation.Autowired;

import system.Data;
import tools.StatystykaAT;

public class FunkcjaOBVTrendZmianaProcent implements FunkcjaAT {

	@Autowired
	static NotowanieRepozytorium notowanieRepozytorium = new PlikNotowanieRepozytorium();
	
	String walorNazwa;
	int przedzialRozmiar;
	
	public FunkcjaOBVTrendZmianaProcent(String walorNazwa, Integer przedzialRozmiar) {
		super();
		this.walorNazwa = walorNazwa;
		this.przedzialRozmiar = przedzialRozmiar;
	}
	
	@Override
	public double obliczWartosc(Object etykieta) {
		Data data = (Data)etykieta;
		double[] cenyZamknieciaTablicaDoubleZaPoprzednie = 
				notowanieRepozytorium.pobierzCenyZamknieciaTablicaDouble(walorNazwa, data, -przedzialRozmiar-4, -4);
		double[] wolumenTablicaDoubleZaPoprzednia = notowanieRepozytorium.pobierzWolumenTablicaDouble(walorNazwa, data, -przedzialRozmiar-3, -4);
		
		double[] cenyZamknieciaTablicaDoublePoprzednie = 
				notowanieRepozytorium.pobierzCenyZamknieciaTablicaDouble(walorNazwa, data, -przedzialRozmiar-1, -1);
		double[] wolumenTablicaDoublePoprzednia = notowanieRepozytorium.pobierzWolumenTablicaDouble(walorNazwa, data, -przedzialRozmiar, -1);
		
		
		double[] cenyZamknieciaTablicaDouble = 
				notowanieRepozytorium.pobierzCenyZamknieciaTablicaDouble(walorNazwa, data, -przedzialRozmiar, 0);
		double[] wolumenTablicaDouble = notowanieRepozytorium.pobierzWolumenTablicaDouble(walorNazwa, data, -przedzialRozmiar+1, 0);

		double obvZaPoprzedni = StatystykaAT.obliczOBV(cenyZamknieciaTablicaDoubleZaPoprzednie, wolumenTablicaDoubleZaPoprzednia);
		double obvPoprzedni = StatystykaAT.obliczOBV(cenyZamknieciaTablicaDoublePoprzednie, wolumenTablicaDoublePoprzednia);
		double obv = StatystykaAT.obliczOBV(cenyZamknieciaTablicaDouble, wolumenTablicaDouble);
		
//		double wynik = StatystykaAT.policzRoznicaProcentowa(obvPoprzedni, obv) - StatystykaAT.policzRoznicaProcentowa(obvZaPoprzedni, obvPoprzedni);
		double wynik = (obv - obvPoprzedni) + (obvPoprzedni - obvZaPoprzedni);
		
		return wynik;
	}

	public String getWalorNazwa() {
		return walorNazwa;
	}

	public int getPrzedzialRozmiar() {
		return przedzialRozmiar;
	}
}
